import { IPSDataEntity } from '../ipsdata-entity';
import { IPSDataEntityObject } from '../ipsdata-entity-object';
import { IPSDEField } from '../defield/ipsdefield';
import { IPSDERBase } from '../der/ipsderbase';
import { IPSSysUniRes } from '../../security/ipssys-uni-res';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDEOPPriv
 */
export interface IPSDEOPPriv extends IPSDataEntityObject {
  /**
   * 逻辑名称
   * @type {string}
   */
  logicName: string;

  /**
   * 映射实体名称
   * @type {string}
   */
  mapPSDEName: string;

  /**
   * 映射实体操作标识
   * @type {string}
   */
  mapPSDEOPPrivName: string;

  /**
   * 映射关系对象
   *
   * @type {IPSDERBase}
   */
  getMapPSDER(): IPSDERBase | null;

  /**
   * 映射关系对象
   *
   * @type {IPSDERBase}
   */
  get mapPSDER(): IPSDERBase | null;

  /**
   * 映射关系对象（必须存在）
   *
   * @type {IPSDERBase}
   */
  getMapPSDERMust(): IPSDERBase;

  /**
   * 映射实体对象
   *
   * @type {IPSDataEntity}
   */
  getMapPSDataEntity(): IPSDataEntity | null;

  /**
   * 映射实体对象
   *
   * @type {IPSDataEntity}
   */
  get mapPSDataEntity(): IPSDataEntity | null;

  /**
   * 映射实体对象（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getMapPSDataEntityMust(): IPSDataEntity;

  /**
   * 系统统一资源
   *
   * @type {IPSSysUniRes}
   */
  getMapPSSysUniRes(): IPSSysUniRes | null;

  /**
   * 系统统一资源
   *
   * @type {IPSSysUniRes}
   */
  get mapPSSysUniRes(): IPSSysUniRes | null;

  /**
   * 系统统一资源（必须存在）
   *
   * @type {IPSSysUniRes}
   */
  getMapPSSysUniResMust(): IPSSysUniRes;

  /**
   * 统一资源代码
   * @type {string}
   */
  mapSysUniResCode: string;

  /**
   * 实体属性
   *
   * @type {IPSDEField}
   */
  getPSDEField(): IPSDEField | null;

  /**
   * 实体属性
   *
   * @type {IPSDEField}
   */
  get psDEField(): IPSDEField | null;

  /**
   * 实体属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getPSDEFieldMust(): IPSDEField;

  /**
   * 属性权限控制
   * @type {boolean}
   * @default false
   */
  dEFieldPriv: boolean;

  /**
   * 映射系统统一资源
   * @type {boolean}
   * @default false
   */
  mapSysUniRes: boolean;

  /**
   * 系统保留
   * @type {boolean}
   * @default false
   */
  systemReserved: boolean;
}
